package com.bookstore.service;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Optional;

/**
 * 通用服务接口，定义基本的CRUD操作
 * @param <T> 实体类型
 * @param <D> DTO类型
 * @param <ID> ID类型
 */
public interface BaseService<T, D, ID> {
    /**
     * 获取所有实体
     * @return 实体DTO列表
     */
    List<D> findAll();
    
    /**
     * 分页获取实体
     * @param pageable 分页参数
     * @return 分页结果
     */
    Page<D> findAll(Pageable pageable);
    
    /**
     * 根据ID获取实体
     * @param id 实体ID
     * @return 实体DTO
     */
    D findById(ID id);
    
    /**
     * 保存实体
     * @param dto 实体DTO
     * @return 保存后的实体DTO
     */
    D save(D dto);
    
    /**
     * 更新实体
     * @param id 实体ID
     * @param dto 实体DTO
     * @return 更新后的实体DTO
     */
    D update(ID id, D dto);
    
    /**
     * 删除实体
     * @param id 实体ID
     */
    void delete(ID id);
}